#pragma once

#include <Engine/SmartPtr.h>
#include <Engine/Renderer/RendererEnums.h>
#include <Engine/Renderer/RendererStructs.h>

namespace fastbird
{
	class Vec2I;
	class ITexture : public ReferenceCounter
	{
	public:
		virtual ~ITexture(){}

		virtual bool IsReady() const = 0;
		virtual const Vec2I& GetSize() const = 0;
		virtual PIXEL_FORMAT GetFormat() const = 0;
		virtual void SetSamplerDesc(const SAMPLER_DESC& desc) = 0;
		virtual const SAMPLER_DESC& GetSamplerDesc() const = 0;
		virtual void Bind() = 0;

		virtual void SetSlot(int slot) = 0;
		virtual int GetSlot() const = 0;

		virtual void SetName(const char* filepath) = 0;
		virtual const char* GetName() const = 0;

		virtual void SetType(TEXTURE_TYPE type) = 0;
		virtual TEXTURE_TYPE GetType() const = 0;

		virtual void SetShaderStage(BINDING_SHADER shader) = 0;
		virtual BINDING_SHADER GetShaderStage() const = 0;		
	};
}